#ifndef BOOKSTORE_H
#define BOOKSTORE_H

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include "book.h"
using namespace std;
using namespace bookandrecord;
namespace bookstore {

//相当于构造函数
Menu* createMenu();
//count表示书的多少
Menu* createMenu(string name, string writer, string ISBN, string publish);
bool addMenu(Menu* menu, int count) ;//添加目录并多册入库


//收藏
int addstar(int user_id,Menu *menu);
//取消收藏
int delstar(int user_id,string isbn);
Book* createBook(int menu_id);
Book* createBook();
//添加书籍,为了做成多册入库
bool addBook(Book* book, int count);
//删除书籍（需要修改）

int deleteBook(int book_id);    //成功0，成功且menu也删除了1，书籍正在被借阅-1，书籍正在被预约 -2
int deleteMenu(int menu_id);    //成功0，目录中有书籍正在被借阅-1，目录中有书籍正在被预约 -2

//借书, 0成功借阅， 1成功借阅并加入英雄榜， -1 借书超上限， -2 该书正在被借阅
int borrow(int stu_id, int bookID);
//续借书籍（在原来的基础上，所以已知了ID）
void reborrow(int record_id);
//归还图书,0正常还书,-1逾期还书，1还书失败
int returnBook(int record_id);
// 0 正常，-1 书籍可直接借阅， -2 书籍已被他人预约， -3 预约数超额
int reserve(int user_id, int book_id);
//取消预约
int cancelReserve(int user_id, int book_id);

/*
 * 按照不同的要求搜索
 *因为搜索条件不同可能会产生多个记录，所以可能返回多个记录

//根据主键查询书籍信息（返回唯一）
Book* searchBook_id(int ID);
//根据isbn查找书籍,可能有好几本
Menu* searchBook_isbn(string isbn);
//判断是否为一本书
//根据其他的信息判断（先调用searchbook_isbn，判断是不是同本书
bool is_same(string name, string writer, string ISBN, string publish);
//根据书名查找书籍,可能有好几本
Menu** searchbook_name(string Name);
//书名的模糊查询
//Menu** searchbook_partname(string name);
//根据用户ID查询他的借书记录,可能多条
*/

//根据多个信息进行精确查询
bool is_same(string name, string writer, string ISBN, string publish);

Menu* search_onemenuReturn(string field, const char* path);
vector<Menu*> search_multiplemenuReturn(string fuzzySearchCondition, string field, string searchKey, const char* path) ;
vector<Book*> search_multiplebookReturn(string fuzzySearchCondition, string field, int searchKey, const char* path) ;
vector<Record*> search_multiplerecordReturn(string fuzzySearchCondition, string field, int searchKey, const char* path);
Record* createRecord();

vector<Record*> search_borrowing(vector<Record*>recordList);
//增添Record记录，返回recordID
int addRecord(int student_id, int book_id);


Record** searchrecord_userID(int userID);
//根据书籍ID查询书籍的被借记录，可能多条
//书籍损坏追溯
Record** searchrecord_bookID(int bookID);
}

#endif // BOOKSTORE_H
